var config = require("../lgApi/config")
var common = require('../../common/common');

const { tansParams, getQueryObj } = require("../../utils/util")
const sm4 =  require('miniprogram-sm-crypto').sm4
const key = 'c120e42ed1f5723b5f0d9b8589ac3be4'

const baseUrl = config.Config.baseUrl

module.exports = {
  http(options) {
    return new Promise((resolve, reject) => {
      // let token = 'token' // 获取token，自行获取token和签名，token和签名表示每个接口都要发送的数据
      let data = {}
      // console.log('options',options)
      // get请求映射params参数
      if (options.method === 'get' || options.method === 'GET') {
        const url = options.url.split('?')
        let params = {}
        if (url[1]) {
          params = getQueryObj(url[1])
        }
        if (options.params) {
          params = Object.assign(params, options.params)
          options.params = {};
        }
        if (options.data) {
          params = Object.assign(params, options.data)
          data = {}
        }
        params = tansParams(params)
        const encryptData = sm4.encrypt(params || '', key)
        let encryptUrl = url[0] + '?encryptParams=' + encryptData;
        options.url = encryptUrl;
      }
      // if (options.data) { // 在这里判断一下data是否存在，params表示前端需要传递的数据，params是一个对象，有三组键值对，data：表示请求要发送的数据，success：成功的回调，fail：失败的回调，这三个字段可缺可无，其余字段会忽略
      //   for (let key in options.data) { // 在这里判断传过来的参数值为null，就删除这个属性
      //     if (options.data[key] == null || options.data[key] == 'null') {
      //       delete options.data[key]
      //     }
      //   }
      //   data = {...data,...options.data}
      // }
      if ((['POST', 'post', 'PUT', 'put'].indexOf(options.method) > -1)) {
        data = {
          encryptParams: sm4.encrypt(JSON.stringify(options.data), key)
        }
      }
      let headers = options.headers || {}
      let nowDate = String(Date.parse(new Date()) / 1000);
      headers.authTime = sm4.encrypt(nowDate, key)
      wx.request({
        url: baseUrl + options.url, // 就是拼接上前缀,此接口域名是开放接口，可访问
        method: options.method || 'POST', // 判断请求类型，除了值等于'post'外，其余值均视作get
        data,
        header: {
          "Authorization": wx.getStorageSync(common.CC_TICKET),
          "content-type": "application/json",
          ...headers
        },
        success(res) {
          const resData = res.data && typeof(res.data) == 'string' ? JSON.parse(sm4.decrypt(res.data, key)) : res.data
          console.info('请求路径+++++>', baseUrl + options.url)
          console.info('请求回参=====>', resData)
          const code = resData.code;
          const msg = resData.msg;
          if (code == 100002) {
            // wx.navigateTo({
            //   url: `/pages/views/account/loginAndReg/loginAndReg`
            // })
            // token超时了,加入判断只进入这里一次，弹窗一次
            if (wx.getStorageSync('outAuth')) {
              return
            }
            console.log('拿到的判断', wx.getStorageSync('outAuth'))
            console.log('进入微认证的次数')
            wx.setStorageSync('outAuth', true)
            wx.showModal({
              title: '提示',
              content: '登录状态已过期',
              showCancel: false,
              success: function (res) {
                wx.clearStorageSync()
                // 设置为游客
                wx.setStorageSync(common.CC_USER_TYPE, 2)
                wx.reLaunch({
                  url: '/pages/views/home/person'
                })
              }
            })
            return
          }
          // 400010 不提示授权不足的
          if (code != null &&( code == "0" || code == 400010)) {
            resolve(resData)
          } else {
            reject(resData)
          }
        },
        fail(err) {
          reject({
            msg: err.errMsg ? err.errMsg : '网络异常，请重试'
          })
        }
      })
    })
  }
}
